#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;

/**
  * @方法: 官方
  * @时间复杂度: o(n)
  * @空间复杂度: o(1)
  * @评价:  代码较简洁，学习！！！
*/
string reverseVowels(string s) {
    string mode = "aeiouAEIOU";
    int i = 0;
    int j = s.length() - 1;
    while (i < j) {
        while (i < s.length() && mode.find(s[i]) == string::npos){
            i++;
        }
        while(j >= 0 && mode.find(s[j]) == string::npos){
            j--;
        }
        if(i < j){
            swap(s[i++], s[j--]);
        }
    }
    return s;
}

/**
 * @方法: lsc的方法
 * @时间复杂度: o(n)
 * @空间复杂度: o(1)
 * @评价: 代码略复杂
 */
string reverseVowels1(string s) {
    unordered_set<char> myset{'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
    int left = 0;
    int right = s.length() - 1;
    while (left < right) {
        while (myset.find(s[left]) == myset.end() && left < right) {
            left++;
        }
        if (left == right)
            break;
        while (myset.find(s[right]) == myset.end() && right > left) {
            right--;
        }
        if (left == right)
            break;
        swap(s[left], s[right]);
        left++;
        right--;
    }
    return s;
}

int main() {
    string s = "hello";
    cout << reverseVowels(s) << endl;
}